﻿//-----------------------------------------------------------------------
// <copyright file="ExceptionExtensions.cs" company="CodePlex">
//     Copyright (c) Doug Holland, CodePlex. All rights reserved.
// </copyright>
//-----------------------------------------------------------------------
namespace CodePlex.Diagnostics
{
    using System;
    
    using System.Collections;
    using System.Collections.Generic;
    
    using System.Security;
    using System.Security.Principal;
    
    using System.Xml;
    using System.Xml.Linq;

    /// <summary>
    /// Provides extension methods for the <see cref="T:System.Exception"/> class to enable the publishing of exceptions using the CodePlex.Diagnostics framework.
    /// </summary>
    public static class ExceptionExtensions
    {
        #region public static Guid Publish(this Exception ex)

        /// <summary>
        /// Publishes the <see cref="T:System.Exception"/> using the configured exception provider.
        /// </summary>
        /// <param name="ex">The <see cref="T:System.Exception"/> to be published.</param>
        /// <returns>A <see cref="T:System.Guid"/> representing the unique publication identifier for an exception and associated inner exceptions.</returns>
        public static Guid Publish(this Exception ex)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region public static Guid Publish(this Exception ex, IIdentity identity)

        /// <summary>
        /// Publishes the <see cref="T:System.Exception"/> using the configured exception provider.
        /// </summary>
        /// <param name="ex">The <see cref="T:System.Exception"/> to be published.</param>
        /// <param name="identity">The <see cref="T:System.Security.Principal.IIdentity"/> to associate with this published exception.</param>
        /// <returns>A <see cref="T:System.Guid"/> representing the unique publication identifier for an exception and associated inner exceptions.</returns>
        public static Guid Publish(this Exception ex, IIdentity identity)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region public static Guid Publish(this Exception ex, Dictionary<string, string> dictionary, IIdentity identity)

        /// <summary>
        /// Publishes the <see cref="T:System.Exception"/> using the configured exception provider.
        /// </summary>
        /// <param name="ex">The <see cref="T:System.Exception"/> to be published.</param>
        /// <param name="dictionary">A <see cref="T:System.Collections.Generic.Dictionary`2"/> containing name value pairs associated with this exception.</param>
        /// <param name="identity">The <see cref="T:System.Security.Principal.IIdentity"/> to associate with this published exception.</param>
        /// <returns>A <see cref="T:System.Guid"/> representing the unique publication identifier for an exception and associated inner exceptions.</returns>
        public static Guid Publish(this Exception ex, Dictionary<string, string> dictionary, IIdentity identity)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region public static Guid Publish(this Exception ex, Dictionary<string, string> dictionary, XElement element, IIdentity identity)

        /// <summary>
        /// Publishes the <see cref="T:System.Exception"/> using the configured exception provider.
        /// </summary>
        /// <param name="ex">The <see cref="T:System.Exception"/> to be published.</param>
        /// <param name="dictionary">A <see cref="T:System.Collections.Generic.Dictionary`2"/> containing name value pairs associated with this exception.</param>
        /// <param name="element">A <see cref="T:System.Xml.Linq.XElement"/> representing an xml element to be associated with this exception.</param>
        /// <param name="identity">The <see cref="T:System.Security.Principal.IIdentity"/> to associate with this published exception.</param>
        /// <returns>A <see cref="T:System.Guid"/> representing the unique publication identifier for an exception and associated inner exceptions.</returns>
        public static Guid Publish(this Exception ex, Dictionary<string, string> dictionary, XElement element, IIdentity identity)
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}